<?php
/**
 * Describe:基础控制器
 * Source:
 * User: blue
 * Time: 2018/3/17 22:30
 */

namespace app\common\controller;

use ocean\AdminLogin;
use ocean\Arr;
use ocean\Auth;

class Base
{
    protected $model;
    protected $request;
    protected $config=[];
    use \traits\controller\Jump;
    public function __construct()
    {
        $this->request=new \think\Request();
        isset($this->config['modelName'])&&$this->model=model($this->config['modelName']);
        method_exists(__CLASS__,'islogin')&&$this->islogin();
        method_exists(__CLASS__,'auth_check')&&$this->auth_check();
    }

    /**
     * @param string  $validateName 验证器名称包括命名空间
     * @param array $data 数据
     * @param string $scence 验证场景
     * @param array $param 直接使用validate时传递数组
     * @return array
     */
    protected function validation($validateName,$data,$scence='',$param=[]){
        $validate=empty($params)?new $validateName():new $validateName($param);
        if(empty($scence)){$res=$validate->batch()->check($data);}
        else{$res=$validate->scene($scence)->batch()->check($data);}
        if(!$res){
            $msg=json_encode($validate->getError(),JSON_UNESCAPED_UNICODE);
            return ['status'=>0,'msg'=>$msg];
        }
        return ['status'=>1,'msg'=>'数据验证成功'];
    }

    /**
     * [ FiledCover 表单字段和数据库字段的转换,多维数组需要重写
     * @param array $data 需要处理的字段
     * @param  array  $array [键名为数据库字段,键值为表单字段]
     * @return array 处理后的数据
     */
    protected  function filedCover($data,$array=[]){
        if(is_array($array)&&!empty($array)){
            foreach ($array as $key => $value) {
                $data[$value]=$data[$key];
                unset($data[$key]);
            }
        }
        return $data;
    }

    /**
     *登录验证
     */
    public function islogin(){
        $res=(new AdminLogin())->is_login();
        if($res['status']==0) $this->error($res['msg'],'admin/login/index');
    }

    /**
     * 权限验证
     */
    public function auth_check(){
        $rule=request()->module().'/'.request()->controller().'/'.request()->action();
        $res=(new Auth())->check($rule,session('user_info.id'));
        if(!$res)$this->error('没有权限','admin/index/index');
    }
}